跳到主要内容

WSL安装配置

WSL简单安装配置

更多内容访问WSL官方文档

安装WSL2

  • 启用适用于 Linux 的 Windows 子系统(命令行执行)

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
  • 启用虚拟机功能(命令行执行)

    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  • 重启

  • 下载安装 Linux 内核更新包(不确定是否必须,可能最新的 Windows已经不需要安装这个了)

    https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
  • 将 WSL 2 设置为默认版本

    wsl --set-default-version 2
  • 在应用商店搜索 WSL,选择想要的版本进行安装

    如果不想安装应用商店的版本,或者想导入其他的 Linux,可以继续执行下面的操作

导出、导入、移动 WSL

移动/导出 WSL

  • 查看 WSL 分发版本

    wsl -l --all -v
  • 导出指定 WSL 为 tar 文件到指定目录

    wsl --export Ubuntu2204 D:\wsl\Ubuntu2204.tar
  • 注销当前分发版

    wsl --unregister Ubuntu2204

导入WSL

导入 WSL 并安装到指定目录 D:\wsl\Ubuntu2204

wsl --import Ubuntu2204 D:\wsl\Ubuntu2204 D:\wsl\Ubuntu2204.tar --version 2

设置默认登陆用户

Ubuntu2204 config --default-user Username

此命令不适用于导入的分发版,因为这些分发版没有可执行启动器。

可以改为使用 /etc/wsl.conf 文件更改导入分发的默认用户。 请参阅 “高级设置配置” 文档中的“自动装载”选项。(测试这个命令有问题)

启动导入的 WSL 系统

wsl Ubuntu2204

配置中文

方案一: 直接复制 Windows 字体到 WSL(字体文件较大)

sudo apt install language-pack-zh-hans -y
sudo dpkg-reconfigure locales
sudo cp -r /mnt/c/Windows/Fonts /usr/share/fonts/windows
sudo apt install fontconfig -y
fc-cache -f -v

第二行命令会显示一个语言选择窗口

上下键移动光标,空格键选择

选择 zh_CN.UTF-8 UTF-8

Tab 移动光标到 Ok Enter 确定

命令执行完后,重启 WSL,即可见到中文

作者:CNCplayer https://www.bilibili.com/read/cv21065541/ 出处:bilibili

方案二: 软链接字体(省空间)

适用于磁盘空间紧张的用户。利用软链接直接读取 Windows 系统盘字体,不产生额外存储。

# 环境准备
sudo apt update && sudo apt install language-pack-zh-hans fontconfig -y
sudo dpkg-reconfigure locales # 手动选择 zh_CN.UTF-8

# 建立目录软链接 (直接引用 Windows 字体文件夹)
sudo mkdir -p /usr/share/fonts/windows
sudo ln -s /mnt/c/Windows/Fonts /usr/share/fonts/windows/winfonts

# 显式告知系统扫描此软链接路径
sudo tee /etc/fonts/local.conf <<EOF
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/usr/share/fonts/windows/winfonts</dir>
</fontconfig>
EOF

# 创建高优先级配置,强制“微软雅黑”为首选黑体并增强渲染效果
sudo tee /etc/fonts/conf.d/99-msyh-standard.conf <<EOF
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="pattern">
<test qual="any" name="family"><string>sans-serif</string></test>
<edit name="family" mode="prepend" binding="strong">
<string>Microsoft YaHei</string>
</edit>
</match>

<match target="font">
<test name="family"><string>Microsoft YaHei</string></test>
<edit name="hinting" mode="assign"><bool>true</bool></edit>
<edit name="hintstyle" mode="assign"><const>hintfull</const></edit>
<edit name="antialias" mode="assign"><bool>true</bool></edit>
</match>
</fontconfig>
EOF


# 刷新字体缓存
sudo fc-cache -f -v

# 验证:应输出 msyh.ttc: "Microsoft YaHei" "Regular"
fc-match "sans-serif"

下载适用于 Linux 的 Android SDK 命令行工具

https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip

解压 Android SDK:将下载的 SDK 工具包解压到您选择的目录。例如,您可以将其解压到 /opt 目录下。

sudo tar -xvzf sdk-tools-linux-*.zip -C /opt

配置环境变量 ~/.bashrc 或者全局的配置 /etc/profile

export GRADLE_USER_HOME=/mnt/d/Environment/.gradle
export PATH=$GRADLE_USER_HOME:$PATH

export ANDROID_HOME=/mnt/d/Environment/Android-SDK
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
source ~/.bashrc

安装 sdk 组件

sdkmanager "platform-tools" "platforms;android-30" "build-tools;30.0.3"

启用镜像模式网络

新版 WSL 自带图形化配置界面,不需要手动更改配置了,下同

  • .wslconfig 文件中添加 (用户目录根目录下面,没有这个文件则手动创建)

    [wsl2]
    networkingMode=mirrored
    autoProxy=true
  • 使用管理员权限在 PowerShell 窗口中运行以下命令,以配置 Hyper-V 防火墙设置,从而允许入站连接:

    Set-NetFirewallHyperVVMSetting -Name ‘{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}’ -DefaultInboundAction Allow 

    或自己配置防火墙规则

    New-NetFirewallHyperVRule -Name MyWebServer -DisplayName “My Web Server” -Direction Inbound -VMCreatorId “{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}” -Protocol TCP -LocalPorts 80

启用此功能会将 WSL 更改为全新的网络体系结构,其目标是将 Windows 上的网络接口“镜像”到 Linux 中,以添加新的网络功能并提高兼容性。

以下是启用此模式的当前优势:

  • IPv6 支持
  • 使用 localhost 地址 127.0.0.1 从 Linux 内部连接到 Windows 服务器
  • 改进了 VPN 的网络兼容性
  • 多播支持
  • 直接从局域网 (LAN) 连接到 WSL

这种新模式解决了使用基于 NAT(网络地址转换)的体系结构时出现的网络问题。 查找已知问题或针对 GitHub 上的 WSL 产品存储库中发现的任何 bug 提交反馈。

DNS 隧道

.wslconfig 文件 中的 [wsl2] 下设置 dnsTunneling=true 可使 WSL 使用虚拟化功能来应答来自 WSL 内的 DNS 请求,而不是通过网络数据包请求它们。

此功能旨在提高与 VPN 和其他复杂网络设置的兼容性。

自动代理

.wslconfig 文件中的 [wsl2] 下设置 autoProxy=true 会强制 WSL 使用 Windows 的 HTTP 代理信息。

如果已在 Windows 中设置了代理,启用此功能会使该代理也在 WSL 中自动进行设置。

其他

某个电脑安装了 WSL 子系统,需要局域网下的其他电脑能够访问这个子系统,假如 B 电脑安装了 WSL 子系统,需要 A 电脑能够访问 B 电脑中的子系统

  1. 查看 B 电脑 Windows 和 WSL 子系统的 IP

    在 B 电脑, Windows 中运行 ipconfig 命令,在 WSL 中运行 ip addr 命令, 得到他们的 IP 地址 比如:

    Windows IP:192.168.5.123

    WSL IP:172.21.123.456

  2. 在 B 电脑上配置端口转发

    将 B 电脑上的某个端口转发到 WSL2 子系统的 SSH 端口(22),下面例子是将 Windows 的 222 端口转发到 WSL 的 22 端口 B 电脑 Windows 系统中用管理员权限执行终端命令:

    netsh interface portproxy add v4tov4 listenport=222 listenaddress=0.0.0.0 connectport=22 connectaddress=172.21.123.456

    后续如果需要取消映射,执行

    netsh interface portproxy delete v4tov4 listenport=222 listenaddress=0.0.0.0
  3. 检查 B 电脑中 OpenSSH 是否已安装:

    打开 PowerShell (管理员权限). 运行以下命令:

    Get-WindowsCapability -Online | Where-Object {$_.Name -like 'OpenSSH*'}

    如果您看到类似以下输出,则表示 OpenSSH 已安装(一般 Windows 默认已经启用了 Client,但是没有启用 Server):

    Name             : OpenSSH.Client~~~~0.0.1.0
    State : Installed
    ...
    Name : OpenSSH.Server~~~~0.0.1.0
    State : Installed

    如果状态不是 Installed 则表示没有安装,比如:

    Name             : OpenSSH.Client~~~~0.0.1.0
    State : Installed
    ...
    Name : OpenSSH.Server~~~~0.0.1.0
    State : NotPresent

    这样就表示 OpenSSH.Server 没有启用,需要执行以下命令:

    Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

    等待安装进度执行完毕后,然后启动 OpenSSH.Server:

    Start-Service sshd
  4. 防火墙允许 222 端口通过

    在 B 电脑 控制面板\系统和安全\Windows Defender 防火墙 中点击 高级设置,点击 入站规则-新建规则,

    选择 端口 - TCP - 特定本地端口 填 222,保存。

  5. 测试连接

    这时候在 A 电脑终端执行

    ssh root@192.168.5.123 -p 222

    可能会提示输入密码,需要输入 B 电脑 Windows 系统的密码,输入正确应该就能连到 B 电脑的 WSL 子系统了

  6. 免密登陆

    每次连接需要输入密码比较麻烦,可以设置免密登陆,免密登陆步骤参考 Linux 中的设置,将 A 电脑的 pub key 添加到 B 电脑 WSL 中的 authorized_keys